package com.hejing.日期时间API.JDK8之前的日期时间API;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * ClassName: DateTimeTest
 * Package: com.hejing.JDK8之前的日期时间API
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-04-17 8:52
 * @Version: 1.0
 */
public class DateTimeTest {

    /**
     * Date类的使用:
     *      java.util.Date:
     *          -> 两个构造器的使用
     *              -> (1) Date d1 = new Date()      // 获取当前时间戳Date实例
     *              -> (2) Date d2 = new Date(long MilliTimes)  // 获取指定时间戳Date实例
     *          -> 两个方法的使用
     *              -> (1) toString()   // 打印Date实例相关信息
     *              -> (2) getTime()    // 获取Date实例时间戳
     *
     *      java.sql.Date: 对应sql中的Date类
     *          ->
     */
    @Test
    public void test01(){

        Date date1 = new Date();
        System.out.println(date1.toString());  // Mon Apr 17 09:06:01 CST 2023
        long milliTimes = date1.getTime();
        System.out.println("对应的毫秒数是: " + milliTimes);

        Date date2 = new Date(1681603000789L);      // 创建一个基于指定时间戳的Date实例
        System.out.println(date2.toString());

    }

    /**
     * sql中的Date类
     *      构造器: 只有带参构造器
     *      方法:
     *          toString()
     *          getTime()
     */
    @Test
    public void test02(){
        java.sql.Date date1 = new java.sql.Date(1601693103536L);
        System.out.println(date1.toString());  // 2020-10-03
        System.out.println(date1.getTime());   // 1601693103536L
    }

    /**
     *
     * SimpleDateFormat类: 用于日期时间的格式化和解析:
     *      格式化: 日期 --> 字符串
     *      解析: 字符串 --> 日期
     */
    @Test
    public void test03() throws ParseException {

        Date date1 = new Date();
        // SimpleDateFormat sdf = new SimpleDateFormat();  默认格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  // 指定格式
        // 格式化: 日期 --> 字符串
        String strDate = sdf.format(date1);
        System.out.println(strDate);  // 2023/4/17 上午9:10

        // 解析:
        Date date2 = sdf.parse("2023-04-17 09:17:54");
        System.out.println(date2);
    }

    /**
     *
     * Calendar类
     *      (1) 实例化: 由于Calendar是一个抽象类，所以我们需要创建其子类的实例，这里我们通过Calendar的静态方法
     *          getInstance()即可获取其实例
     *      (2) 常用方法:
     *          -> get(int field)
     *          -> set(int field, xx)
     *          -> add(int field, xx)
     *          -> Date getTime()
     *          -> setTime(Date)
     */
    @Test
    public void test04(){

        // Calendar.getInstance
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getClass());  // class java.util.GregorianCalendar

        // 测试方法
        // get(属性)
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        // set(int field, xx)  : 重置属性field为xx
        calendar.set(Calendar.DAY_OF_MONTH, 23);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));  // 23

        // add(int field, xx)  在原有的field属性上增加或减少xx天
        calendar.add(Calendar.DAY_OF_MONTH, 3);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));  // 26

        // getTime()  : 将Calendar 转换为 Date类型
        Date date1 = calendar.getTime();
        System.out.println(date1);

        // setTime(Date) 传入一个Date类型对象重置当前Calendar类型
        Date date2 = new Date();
        calendar.setTime(date2);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));  // 17
    }
}




























